#pragma unmanaged

class Vector4 {
public:
	float vector[4];
	Vector4();
	void operator=(Vector4 &v);
	Vector4 operator+(Vector4 &v);
	Vector4 operator-(Vector4 &v);
	float SculMul(Vector4 &v);
	Vector4 operator*(float s);
};
class Vector3 {
public:
	float vector[3];
	Vector3();
	void operator=(Vector3 &v);
	Vector3 operator+(Vector3 &v);
	Vector3 operator-(Vector3 &v);
	float SculMul(Vector3 &v);
	Vector3 operator*(float s);
	Vector3 operator*(Vector3 &v);
	float Module();
	Vector3 Normalize();
};

class Matrix4x4 {
public:
	float matrix[4][4];
	void Translation(float x,float y, float z);
	void RotationX(float fx);
	void RotationY(float fy);
	void RotationZ(float fz);
	void Scaling(float sx, float sy, float sz);
	void View(float x,float y, float z, float rotatex, float rotatey, float rotatez);
	void Projection(float fovw, float fovh, float znear, float zfar);
	void operator=(Matrix4x4 &m);
	Matrix4x4 operator+(Matrix4x4 &m);
	Matrix4x4 operator-(Matrix4x4 &m);
	Matrix4x4 operator*(Matrix4x4 &m);
	Vector4 operator*(Vector4 &v);
	Matrix4x4 operator*(float s);
	void Transformation(float x, float y, float z,float sx, float sy, float sz, float fx, float fy, float fz); 
	Matrix4x4();
private:
	float cot(float fov);
	float rad(float fov);
};
#pragma managed